﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;

namespace Data
{
    // реализация шаблона Singleton, который предоставляет доступ к соединению с базой данных
    public sealed class DBManager
    {
        static private DBManager _instance = null;
        static public DBManager Instance
        {
            get
            {
                if (_instance == null)
                {
                    _instance = new DBManager();
                }
                return _instance;
            }
        }
        
        private DBManager()
        { 
            _connStr = @"Data Source=.\SQLExpress;" +
                       @"Initial Catalog=demoplayerdotnet;" +
                       @"Integrated Security=True;";
        }

        private readonly String _connStr;
        public String ConnStr
        {
            get { return _connStr; }
            //set { _connStr = value; }
        }

        private SqlConnection _connection;
        public SqlConnection Connection
        {
            get {
                // проверяем, есть ли екземпляр _сonnection
                // если нет - создаем
                if (null == _connection)
                {
                    _connection = new SqlConnection(ConnStr);
                }
                // проверка на наличие сломанного соединения
                // если нет - закрываем
                if (ConnectionState.Broken == _connection.State)
                {
                    _connection.Close();
                }
                // если соединение есть, но закрыто - открываем его
                if (ConnectionState.Closed == _connection.State)
                {                    
                    try
                    {
                        _connection.Open();
                        //MessageBox.Show("DB Connected successfully");
                    }
                    catch (SqlException ex)
                    {
                        MessageBox.Show("DB Connection Error");
                        return null;
                    }
                }
                return _connection; 
            }
        }
    }
}
 